package org.oschina.api.discuss.tag.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.oschina.Config;
import org.oschina.Constants;
import org.oschina.api.BaseService;
import org.oschina.api.discuss.forum.service.DiscussForumService;
import org.oschina.api.discuss.tag.dao.DiscussTagDAO;
import org.oschina.api.discuss.tag.model.DiscussTag;
import org.oschina.api.discuss.tag.vo.DiscussTagVo;
import org.oschina.api.manage.config.service.ConfigService;
import org.oschina.api.index.service.IndexService;
import org.oschina.util.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DiscussTagService extends BaseService {

	@Autowired
	private DiscussTagDAO discussTagDAO;
	@Autowired
	private DiscussForumService discussForumService;
	@Autowired
	private ConfigService configService;
	@Autowired
	private IndexService indexService;
	
	/**
	 * 根据板块返回
	 * @param forum
	 * @param first
	 * @param max
	 * @return
	 */
	public List<DiscussTagVo> findByVoDiscussForum(int forum)
	{
		if(discussForumService._findVoById(forum)==null)
			return null;
		
		return _findByVoDiscussForum(forum, 0, _getPageCount());
	}
	
	/**
	 * 根据讨论返回
	 * @param discuss
	 * @return
	 */
	public List<DiscussTagVo> _findVoByDiscuss(int discuss)
	{
		return discussTagDAO.findVoByDiscuss(discuss);
	}
	
	/**
	 * 创建
	 * @param discuss
	 * @param tags
	 */
	public void _create(int discuss,String tags[])
	{
		if(tags==null || tags.length==0)
			return;
		
		List<DiscussTag> discussTags=new ArrayList<DiscussTag>(tags.length);
		for(String tag:tags)
		{
			if(!StringUtils.isBlank(tag))
			{
				for(DiscussTag discussTag:discussTags)
				{
					if(discussTag.getContent().equals(tag))
						continue;
				}
				
				DiscussTag discussTag=new DiscussTag();
				discussTag.setId(_getIndex());
				discussTag.setDiscuss(discuss);
				discussTag.setContent(tag);
				discussTag.setCreate_time(DateUtil.now());
				discussTags.add(discussTag);
			}
		}
		
		if(!discussTags.isEmpty())
			_batchCreate(discussTags);
	}
	
	/**
	 * 批量创建
	 * @param discussTags
	 * @return
	 */
	private int[] _batchCreate(List<DiscussTag> discussTags)
	{
		return discussTagDAO.batchCreate(discussTags);
	}
	
	/**
	 * 根据板块返回
	 * @param forum
	 * @param first
	 * @param max
	 * @return
	 */
	private List<DiscussTagVo> _findByVoDiscussForum(int forum,int first,int max)
	{
		return discussTagDAO.findByVoDiscussForum(forum, first, max);
	}
	
	private int _getIndex()
	{
		return indexService.getMajorById(Constants.INDEX_DISCUSS_TAG);
	}
	
	private int _getPageCount()
	{
		return (Integer)configService.getValueById(Config.CONFIG_12, Integer.class);
	}
}